grammar calculator;

options {
    language=Java;
    output=AST;
    ASTLabelType=CommonTree;
}

// PARSER RULES
program     : ( ( assign | out ) SEMICOLON)+ ;
assign      : VAR EQUA expr ;
out         : (PRINT '('expr ')' )+ ;

expr        : expr (MULT | DIV) expr
            | expr (MINUS |PLUS) expr
            | NUMBER
            | VAR
            | '(' expr ')'
            ;

//LEXER RULES
PRINT       : 'print';
NUMBER      : INT | FLOAT ;
VAR         : [a-zA-Z][a-zA-Z0-9]*;
WHITESPACE  : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ ->skip ;
INT         : [0-9] | [1-9][0-9]+ ;
FLOAT       : [0-9]+ POINT [0-9]+ ;

PLUS        : '+' ;
MINUS       : '-' ;
MULT        : '*' ;
DIV         : '/' ;
SEMICOLON   : ';' ;
EQUA        : '=' ;
POINT       : '.' ;